CLI・CUIなワークステーションを作る へ

(整理していないメモ)携帯ディスプレイを流用した機械にFreeBSDを入れる

最終目標

「GPD MicroPC」(と今はLinuxでがまんしている「GPD PocketPC(初代)」)に,CUIで操作できるように,FreeBSDを入れること。

課題

中国製の小型PCにありがちな,
「ディスプレイに携帯電話等のものを流用……デフォルトは縦長使用。
 そこに横長のキーボードをくっつけるから,
 縦長のディスプレイを無理やり左90°回転させくっつけた感じの表示になる。」
ちなみにGPD PocketPCにLinux入れているのは,例えばUbuntuは普通にインストールして回転されない方向に普通に表示されるため。
またUEFI画面ではやはり普通に表示されるし,FreeBSDもそこから一定のところまではやはり普通に表示される。
したがって原理的には解決可能な話。

一段下げた目標

CUIでの操作が目標だけど,X-windowで解決するならとりあえずそれを実現する。
……起動時にemacs起動まで自動で行くなら,実際上問題は少ないし,Linuxではそれができているし。

当面の対策

当面,FreeBSDだけを入れるのではなく,Linuxとのデュアルインストールにして,Linuxでなぜ左倒しにならず表示できているのかの情報を集めつつ作業する。
テュアルインストールに際しては,FreeBSDとLinuxとの間のデータ受け渡しのために,双方から読めるFAT32領域を作っておく。

最新の進行状況と課題

1 scfbで画面を右に回転させる

一番近そうだけど,ちょっと手詰まり

2 Intel-driverに代える

こちらはこちらでそもそもXが動いてくれない。

3 UEFIの段階でなんとかする

実はまっさらの段階だとUEFIも左倒しになるんだけど,Ubuntuとのデュアルブートにしてからは,UEFIも正常な横長方向,その後のFreeBSDの起動画面も途中までは横長になるので,この段階であえて右倒しにしておけば,その左倒し=正常な横長方向になるんじゃないか?って考えていて試したいところ。
もうそろそろ届くであろうOS自作の本がUEFIあたりをいじっているようなので,何か参考になる情報があればいいね〜と願っている。

Linuxのインストール

Ubuntu MATEをインストールした後に,その際確保した領域にUbuntuを入れ直す。
これは,
・Ubuntuではインストール途中でHDDの領域を手動で確保しようとしたり,指定しようとしたりすると,とある画面で下の方の表示されない領域にボタン等が現れ,そこに行けないため詰んでしまう。
・Ubuntu MATEでは,「alt」+「左クリック」でポインターが手の形に変わる箇所があるので,そこでそのように変えてマウスパッドで動かすと画面が動かせる。
 しかし画面が左90°回転してしまう。
・UbuntuMATEのインストールに成功したのちにその領域にUbuntuを入れるのは,どちらの問題も回避できた。
ということによる。
ただし,この手順を踏むことでUEFIの起動時が結構とんでもない選択肢数になってしまう。
※なお,この作業中,なぜか残りの領域にubuntuが入ってしまったことがあったが,さらにそれを削ってubuntuを入れなおした時に,ubuntuMATEに上書きインストールされたので問題なし。
4GBのFAT32領域も確保しておくことを忘れずに。

その後,以下の手順を踏んでおく
・cd /EFI/bootとして,boot側のBOOTX64.EFIとmmx64.efiについてバックアップをとる=後ろに.orgでも付けたファイル名にしておく
 例 mv BOOTX64.EFI BOOTX64.EFI.org
・ubuntu側の5つのファイルを全部bootにコピーする
 例(cd /EFI/ubuntuとした上で)cp /EFI/ubuntu/*.efi /EFI/BOOT/
 ※ワイルドカードは使えるのに,ディレクトリの相対指定はきかない模様。な〜ぜ〜。
・boot側のgrubx64.efiのファイル名をBOOTX64.EFIに変更する。
 例 cp grubx64.efi BOOTX64.EFI
 ※同一ディレクトリ内だと絶対指定でなくていい模様。な〜ぜ〜。
これで本来はUEFI画面で時間切れで自動的にubuntuが起動するはずなのだが……

……なぜか起動しないから,fs0:/EFI/BOOT/BOOTX64.EFIとファイル名打ち込んで動かす……。

FreeBSDのインストール

グラフィカルなインストールが可能なBSDの検討

BSDハンドブックによると……
「グラフィカルなインストーラで FreeBSD をインストールしたいと考えているユーザは、 FuryBSD, GhostBSD もしくは MidnightBSD に興味を持たれるでしょう。」
PC-BSDあらためTrueOSなき後も,デスクトップ向けにインストーラーを工夫したBSDがあるなんて……。
とはいえ,FuryBSDも既に配布終了。MidnightBSDはすっごい苦労しているって情報が転がっていたので,GhostBSDを試すことに。
インストールはできたんだけど,結局何も起動せず……。
ただし,GhostBSDのインストールと削除後,それまで電源投入から一貫して左倒しの表示だったのが,この後は電源投入からFreeBSD特有のデーモン君のキャラクタアートのついた起動画面の後までずっと正常表示で進むようになった。
だから,何か手を打てば,起動時からloginまで,またその後も正常表示で進めることが今は可能になっているのではないか?【重要性の極めて高い課題】

結局普通のFreeBSDを入れることにする

入れ方はhttp://www.lufimia.net/cal/workstation/index.htm参照。
レガシーBIOSの設定にするとなぜか動かなくて,UEFIのまま,言い換えればBIOS設定は特に変更しないでいい。
※なお外付けUSB接続のキーボードがあるとはかどる。画面が左倒しになっているので,右90度回転させると縦長の画面にして,その状態で機械についているキーボードを操作するのはうっとうしいので,外付けキーボードで解決。
UEFIの画面から
fs1:/EFI/BOOT/BOOTx64.efiで起動

ubuntu側のX関係のファイルの状況

/etc/X11/xinit/xinitrc

. /etc/X11/Xsession

/etc/X11/xinit/xserverrc

exec /usr/bin/x -nolisten tcp "$@"

/etc/X11/xorg.conf.d/10-amdgpu.conf

Section "OutputClass"
	Identifier "AMDgpu"
	MatchDriver "amdgpu"
	Driver "amdgpu"
EndSection

/etc/X11/xorg.conf.d/10-radeon.conf

Section "OutputClass"
	Identifier "Radeon"
	MatchDriver "radeon"
	Driver "radeon"
EndSection

/etc/X11/xorg.conf.d/40-libinput.conf

/etc/X11/xorg.conf.d/70-wacom.conf


まずは単純に起動させてみる

なにせ最近のFreeBSDでは,インストールの後,xorg関連をpkgで入れてしまい,若干の設定ファイルを書くと,それだけで動いてしまうので,それでやってみます。
……動いてくれません。

困った時のscfbドライバ

困った時にはscfbドライバなわけです。
以下の内容で driver-scfb.conf を作成し,xorg.conf.d/ に置きます。
先に置いてあるxorg.confを動かしたりいじったりする必要はない模様。
Section "Device"
	Identifier "Card0"
	Driver     "scfb"
EndSection
これで左倒しではありますが,tvmでXは表示されます。
※……Card0で表示されているんだよな〜……
.xinitrcをいじって,当面windowは1枚だけ開くようにして,そのサイズも左倒し前提で変なことにならないサイズに設定します。

keyboard-zap.conf

設定が悪いのかマウスポインターは出るものの動きません。
当座必要ないので放置ですが,Xからコンソールに戻れないのはどうかと思うので,
ctrl-alt-BSで戻れるようにします。
以下の内容で keyboard-zap.conf を作成し,xorg.conf.d/ に置きます。
Section	"InputClass"
	Identifier		"KeyboardDefaults"
	MatchIsKeyboard	"on"
	Option			"XkbOptions"	"terminate:ctrl_alt_bksp"
EndSection
これで
・「コンソールからstartxでXが動く」
・「ctrl-alt-BSでコンソールに戻る」
が実現できます。

scfbで横倒しでも動く時の/var/log/Xorg.0.log

rotateを使うらしい

どっかのサイトでこうすると左倒しが解消するよという設定を見たので試してみる。
driver-scfb.conf に以下の項目を追加してみる。
Section "Device"
	Identifier	"Generic FB"
	Driver		"scfb"
	Option		"Rotate"	"CW"
EndSection
だめです。何も変わりません。
次に試したのが Section "Monitor" で変えるという方法論。
上記の変更は削って元に戻して,まずはmonitor.confというファイルにxorg.confのSection "Monitor"をコピー
Section "Monitor"
	Identifier	"Monitor0"
	VendorName	"Monitor Vendor"
	ModelName	"Monitor Model"
EndSection
これだけだと,実質的には何も変更がないから普通に動くはずで,実際動きました。
これにRotate rightを加える。
Section "Monitor"
	Identifier	"Monitor0"
	VendorName	"Monitor Vendor"
	ModelName	"Monitor Model"
	Option		"Rotate"	"right"
EndSection
動きますが,まだ左倒しのままです。

xrandr --出力ポート --rotate right

xorg.conf.dに置くのではなくxinitrcに書くべきという話があったので
出力ポート名を調べてみようということになり
xrandrで情報取れるよと聞いたので,さっそくやってみたんだけど……。

>xrandr
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 1280 x 720, current 1280 x 720, maximum 1280 x 720
default connected 1280x720+0+0 0mm x 0mm
	1280x720	0.00*
出力ポートの記載なし。
ここで「このスクリプトで回転できています」という情報を得て解析してみたら xrandr -currentで情報を取った上で,その情報で引数設定しているみたいなんで
>xrandr -current
……全く同じ結果だった。
うん,xrandrはまともに動いているし,前提としてx-serverも正常運転中。

pciconf -lv

これで入出力ポートの状況がわかるというので実行してみたら,確かにそれっぽいのはある。
vgapci0@pci0:0:2:0
	Vender='Intel Corporation'
	device='UHD Graphics 605'
	class='display'
	subclass='VGA'
>devinfo
でもポート名は同様に出る。
そこで出力ポートをvgapci0として
>xrandr --出力ポート --rotate right
を実行したけど,引数がおかしいってエラーを返してきて,
vgapci,vgaも試したけど,エラーとしては同じエラー。

ubuntuで動いた設定ファイルをそのまま並べてみる

/usr/local/etc/X11/xorg.conf.d/ にubuntu側で動いているのを確認している設定ファイルをとりあえずそのまま置いてみます。
置いたファイルは
・10-amdgpu.conf ……これ絶対関係あるはずだよね。
・10-quirks.conf
・10-radeon.conf ……これもあやしいよなあ。
・40-libinput.conf ……画面表示の問題ではなかろう。
・70-wacom.conf ……まさかマウスパッド?

……変化ありません。

ちなみにlinux側,ファイル名冒頭に数字書いてあるの,適用する優先順位だって最近知ったという。

インテルのドライバーなの確定だからintelのドライバー入れようぜ

サイトとか見るとUHD Graphics 605を使用しているのは間違いないので,
要はインテルドライバ入れるべきところで汎用ドライバでお茶を濁したのが敗因とみて
インテルのドライバを入れましょうってなった。
以下の内容で driver-intel.conf を作成し,xorg.conf.d/ に置きます。
ちなみにdriver-scfb.confはdriver-scfb.conf.orgに名称変更
Section "Device"
	Identifier "Card0"
	Driver     "intel"
	# BusID    "PCI:0:2:0"
EndSection
動きません。
もしかして自動認識していない=入っていないってこと?と思って
pkgでxf86-drivers-intelを入れたら,
動かないことは動かないんだけど,エラーの数が格段に減ったので,たぶん正解に近づいているんだと思いたい。
(EE) open /dev/dri/card0 : No such file or directory
(EE) Falling back to old probe method for modesetting
(EE) open /dev/dri/card0 : No such file or directory
(EE) VGA arbiter : cannot open kernel arbiter, no multi-card support
(EE) Screen 0 deleted because of no matching config section.
(EE) Device(s) detected. but none match those in the config file.
Fatal server error:
(EE) no screens found (EE)

ちなみに自動生成されたxorg.conf

Section "ServerLayout"
	Identifier	"X.org Configured"
	Screen	0	"Screen0"	0	0
	InputDevice	"Mouse0"	"CorePointer"
	InputDevice	"Keyboard0"	"CoreKeyboard"
EndSection

Section "Files"
	ModulePath	"/usr/local/lib/xorg/modules"
	FontPath	"/usr/local/share/fonts/misc/"
	FontPath	"/usr/local/share/fonts/TTF/"
	FontPath	"/usr/local/share/fonts/OTF/"
	FontPath	"/usr/local/share/fonts/Type1/"
	FontPath	"/usr/local/share/fonts/100dpi/"
	FontPath	"/usr/local/share/fonts/75dpi/"
	FontPath	"catalogue:/usr/local/etc/X11/fontpath.d"
EndSection

Section "Module"
	load	"glx"
EndSection

Section "InputDevice"
	Identifier	"Keyboard0"
	Driver		"kbd"
EndSection

Section "InputDevice"
	Identifier	"Mouse0"
	Driver		"mouse"
	Option		"Protocol"	"auto"
	Option		"Device"	"/dev/sysmouse"
				"ZRxisMapp	6	7"
EndSection

Section "Monitor"
	Identifier	"Monitor0"
	VendorName	"Monitor Vendor"
	ModelName	"Monitor Model"
EndSection

Section "Device"
	### Available Driver options are:-
	### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
	### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
	### <percent>: "<f>%"
	### [arg]: arg optional
	#Option		"SWcursor"			# [<bool>]
	#Option		"kmsdev"			# <str>
	#Option		"ShadowFB"			# [<bool>]
	#Option		"AccelMethod"		# <str>
	#Option		"PageFlip"			# [<bool>]
	#Option		"ZaphodHeads"		# <str>
	#Option		"DoubleShadow"		# [<bool>]
	#Option		"Atomic"			# [<bool>]
	Identifier	"Card0"
	Driver		"modesetting"
	BusID		"PCI:0:2:0"
EndSection

Section "Screen"
	Identifier	"Screen0"
	Device		"Card0"
	Monitor		"Monitor0"
	SubSection	"Display"
		Viewport	0	0
		Depth		1
	EndSubSection
	SubSection	"Display"
		Viewport	0	0
		Depth		4
	EndSubSection
	SubSection	"Display"
		Viewport	0	0
		Depth		8
	EndSubSection
	SubSection	"Display"
		Viewport	0	0
		Depth		15
	EndSubSection
	SubSection	"Display"
		Viewport	0	0
		Depth		16
	EndSubSection
	SubSection	"Display"
		Viewport	0	0
		Depth		24
	EndSubSection
EndSection

CUIなワークステーションを作る へ